package br.com.aquinoevasconcelos.servlets.arquivo;

import java.io.File;
import java.io.IOException;
import java.util.Date;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import br.com.aquinoevasconcelos.fachada.Fachada;
import br.com.aquinoevasconcelos.modelos.Arquivo;
import br.com.aquinoevasconcelos.modelos.Dados;
import br.com.aquinoevasconcelos.user.UsuarioAdm;
import br.com.aquinoevasconcelos.user.UsuarioCliente;
import br.com.aquinoevasconcelos.util.Pastas;

/**
 * Servlet implementation class InserirArquivoAdm
 */
@WebServlet("/InserirArquivoAdm")
public class InserirArquivoAdm extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
    public InserirArquivoAdm() {
        super();
    }

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	
    	Fachada fachada = Fachada.getInstancia();
    	String categoria = null;
    	String loginCliente = null;
    	
    	Dados dados = new Dados(categoria, loginCliente);
    	Arquivo arquivo = new Arquivo();
    	UsuarioAdm adm = new UsuarioAdm();
    	UsuarioCliente cliente = new UsuarioCliente();

    	HttpSession sessaoAdm = request.getSession();
    	adm = (UsuarioAdm) sessaoAdm.getAttribute("sessaoAdministrador");
    	
    	
    	
    	arquivo.setAdm(adm);
    	
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if(isMultipart) {
            try {
                FileItemFactory factory = new DiskFileItemFactory();
                ServletFileUpload upload = new ServletFileUpload(factory);
                @SuppressWarnings("unchecked")
				java.util.List<FileItem> items = (java.util.List<FileItem>) upload.parseRequest(request);
                for(FileItem item : items) {
                    if(item.isFormField()) {
                        //se for um campo normal de form
                        response.getWriter().println("Form field");
                        response.getWriter().println("Name:"+item.getFieldName());
                        response.getWriter().println("Value:"+item.getString());
                        
                        if (item.getFieldName().equals("titulo")){
                        	System.out.println("entrou "+item.getString());
                           arquivo.setTitulo(item.getString());
                        }  
                        
                        else if (item.getFieldName().equals("idCliente")){
                        	System.out.println("entrou "+item.getString());
                        	
                        	long idClienteBanco = Long.parseLong(item.getString()); 
                        	
                        	cliente.setId(idClienteBanco);

                        	arquivo.setCliente(cliente);
                        	
                            }
                        else if (item.getFieldName().equals("login")){
                        	System.out.println("entrou "+item.getString());
                        	dados.loginCliente = item.getString();
                          
                            }
                        else if (item.getFieldName().equals("categoria")){
                        	System.out.println("entrou "+item.getString());
                        	
                        	dados.categoria = item.getString();
                            arquivo.setCategoria(item.getString());
                            }
                        
                        else{
                        	System.out.println("errooo"+item.getString());
                        }
                       
                        
                    }
                    
                    else {
                        //caso seja um campo do tipo file
                    	response.getWriter().println("NOT Form field");
                    	response.getWriter().println("Name:"+item.getFieldName());
                    	response.getWriter().println("FileName:"+item.getName());
                    	response.getWriter().println("Size:"+item.getSize());
                    	response.getWriter().println("ContentType:"+item.getContentType());
                    	
                    	// ajustar para o diretorio especifico
                    	File uploadedFile = new File(new Pastas().caminhoPrincipalClientes()+dados.loginCliente+"/"+dados.categoria+"/"+new Date().getTime()+"_"+item.getName());
                    	item.write(uploadedFile);
                    	
                        arquivo.setCaminhoArquivo(uploadedFile.getPath());
                    	fachada.atualizarADM(adm);
                    	fachada.inserirArquivo(arquivo);
                    	
                    	response.sendRedirect("admin/enviar_arquivos.jsp?msg=sucesso");
                    	
                    }
                }
            } catch (Exception e) {
            	response.getWriter().println("ocorreu um problema ao fazer o upload: " + e.getMessage());
            	
    			RequestDispatcher rd = request.getRequestDispatcher("pagina_erro/erro.jsp");
    			rd.forward(request, response);
    			e.printStackTrace();
            }
 
        }
    	
    	
    	/*
    	try {
    		
    		String caminhoServidor = null;
    	//	/sis_contabil/Clientes/
    	MultipartRequest arq = new MultipartRequest(request,"/home/paulo/", 10240000);
    	
    	String categoria = arq.getParameter("categoria");
    	String loginCliente = arq.getParameter("login");
    	
    	caminhoServidor = "/home/paulo/sis_contabil/clientes/"+loginCliente+"/"+categoria;
    	

    	HttpSession sessaoAdm = request.getSession();
    	adm = (UsuarioAdm) sessaoAdm.getAttribute("sessaoAdministrador");
    	
    	System.out.println(arq.getParameter("login"));
    	System.out.println(arq.getParameter("titulo"));
    	System.out.println(arq.getParameter("idCliente"));
    	System.out.println(arq.getParameter("categoria"));
    	
    	long idClienteBanco = Long.parseLong(arq.getParameter("idCliente")); 
    	
    	cliente.setId(idClienteBanco);
    
    	
    	usu.add(adm);
    	usuCliente.add(cliente);
    	
        	arquivo.setUsuarioAdm(usu);
        	arquivo.setUsuarioCliente(usuCliente);
    		arquivo.setTitulo(arq.getParameter("titulo"));
    		arquivo.setCategoria(arq.getParameter("categoria"));
    		
    		File arquivoAdm = new File(caminhoServidor+arq.getFile("file1"));
    		arquivoAdm.canWrite();
    	
    		//File arquivoAdm = new File(caminhoServidor+new Date().getTime()+"_"+arq.getFile("file1"));
    		
     		
    		
    		//File arquivoAdm = arq.getFile("file1");
    		String caminhoArquivo = arquivoAdm.getPath();
    		System.out.println(arquivoAdm.getPath());

    		arquivo.setCaminhoArquivo(caminhoArquivo);

    	    		fachada.inserirArquivo(arquivo);
    	    		response.sendRedirect("admin/enviar_arquivos.jsp?msg=sucesso");
    	    // /home/paulo/sis_contabil/clientes/jose/Documentos/home/paulo/sis_contabil/clientes/site.pdf		
    	    		
		} catch (Exception e) {
			response.sendRedirect("pagina_erro/erro.jsp");
			e.printStackTrace();
			
		}
		
		*/
    	
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		service(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		service(request, response);
	}

}
